

struct ListNode
{
 int val;
 struct ListNode *next;
};

struct TreeNode
{
 int val;
 struct TreeNode *left;
 struct TreeNode *right;
};

// [1] 两数之和
int *twoSum(int *nums, int numsSize, int target, int *returnSize);

// [9] 回文数
bool isPalindrome(int x);

// [14] 最长公共前缀
char *longestCommonPrefix(char **strs, int strsSize);

// [20] 有效的括号
// 模拟栈
bool isValid(char *s);

// [21] 合并两个有序链表
struct ListNode *mergeTwoLists(struct ListNode *list1, struct ListNode *list2);

// [26] 删除有序数组中的重复项
int removeDuplicates(int *nums, int numsSize);

// [27] 移除元素
int removeElement(int *nums, int numsSize, int val);

//[28] 找出字符串中第一个匹配项的下标
int strStr(char *haystack, char *needle);

//[35] 搜索插入位置
int searchInsert(int *nums, int numsSize, int target);

// [58] 最后一个单词的长度
int lengthOfLastWord(char *s);

// [66] 加一
int *plusOne(int *digits, int digitsSize, int *returnSize);

// [67] 二进制求和
char *addBinary(char *a, char *b);

// [69] x 的平方根
int mySqrt(int x);

// [70] 爬楼梯
int climbStairs(int n);

// [83] 删除排序链表中的重复元素
struct ListNode *deleteDuplicates(struct ListNode *head);

// [88] 合并两个有序数组
void merge(int *nums1, int nums1Size, int m, int *nums2, int nums2Size, int n);

// [94] 二叉树的中序遍历
int *inorderTraversal(struct TreeNode *root, int *returnSize);

// [100] 相同的树
bool isSameTree(struct TreeNode *p, struct TreeNode *q);

// [101] 对称二叉树
bool isSymmetric(struct TreeNode *root);

// [104] 二叉树的最大深度
int maxDepth(struct TreeNode *root);

// [108] 将有序数组转换为二叉搜索树
struct TreeNode *sortedArrayToBST(int *nums, int numsSize);

// [110] 平衡二叉树
bool isBalanced(struct TreeNode *root);

// [111] 二叉树的最小深度
int minDepth(struct TreeNode *root);

// [112] 路径总和
bool hasPathSum(struct TreeNode *root, int targetSum);

// [118] 杨辉三角
int **generate(int numRows, int *returnSize, int **returnColumnSizes);

// [119] 杨辉三角 II
int *getRow(int rowIndex, int *returnSize);

// [125] 验证回文串
bool isPalindrome(char *s);

// [136] 只出现一次的数字
int singleNumber(int *nums, int numsSize);
